﻿Public Class frmTrPozycjaZlecenia

    'formularz moze byc otwierany z poziomu:
    '1)frmTrZlecenie: w celu wprowadzania schametów pordukcji
    '2)frmOperacji: w celu sparwdzenia, która jest kolejnośc danej operacji w schemacie produkcji (dany wiersz jest zaznaczony, frm tylko do odczytu)
    '3)formularz wyswietlany w menu CIAGADLA w celu obliczenia szeregu: dwukrotne kliknięcie powoduje wyswietlenie frmSzereg
    '4)frmKontroli: w celu analizy ile kilogramów znajduje sie na poszczególnych operacjach do dgvInfomacje jest dodana kolumna 'aktualna waga'
    Private mvarDbHolder As clsDataBase
    Private mvarChanged As Boolean
    Private mvarKlient As String
    Private mvarTermin As String
    Private mvarPozycjaZlecenia As clsInhTrPozycjaZlecenia
    Private mvarSchematId As Integer
    Private mvarPozycjaSchematuId As Integer
    Private mvarWyznTylkoDoOdczytu As Boolean = False
    Private mvarWyznKontrola As Boolean
    Private mvarUzytkownik As clsUzytkownik

    Private mvarWyznSprawdzeniaLiczby As Boolean
    Private mvarWyznSprawdzenieIlosci As Boolean
    Private mvarKomunikat As String
    Private mvarBlokowanie As clsRecordLock
    Private mvarLicznik As Integer

    Private mvarComboList As List(Of ComboBox)
    Private mvarSchematIndex As Integer
    Private mvarStatusId As Integer

    Public Sub New(Klient As String, Termin As String, PozycjaZleceniaId As Integer, SchematId As Integer, PozycjaSchematuId As Integer, WyznTylkoOdczyt As Boolean, Kontrola As Boolean)
        ' To wywołanie jest wymagane przez projektanta.
        InitializeComponent()

        ' Dodaj inicjację po wywołaniu funkcji InitializeComponent().
        mvarDbHolder = New clsDataBase(VAR_CONNECTION_PARAMETERS, VAR_ERROR_HANDLER)
        mvarUzytkownik = CType(clsUzytkownik.Instance(), clsUzytkownik)
        mvarComboList = New List(Of ComboBox)

        mvarKlient = Klient
        mvarTermin = Termin
        mvarPozycjaZlecenia = New clsInhTrPozycjaZlecenia(PozycjaZleceniaId, mvarDbHolder, True)
        mvarSchematId = SchematId
        mvarPozycjaSchematuId = PozycjaSchematuId
        mvarWyznTylkoDoOdczytu = WyznTylkoOdczyt
        UzupelnijDane()

        Blokowanie()

        PobierzWszystkieGrupyMaszyny()
        PobierzWszystkichPracownikow()
        PobierzWszystkieOpakowania()

        If Kontrola Then
            mvarWyznKontrola = Kontrola
            mvarWyznTylkoDoOdczytu = True
            grbPrzyciskiZapisu.Visible = False
            grbPrzyciskiEdycji.Visible = False
            cmdPowiazanieMaterialu.Visible = True
            cmdAnuluj.Visible = True
            cmdZakoncz.Visible = True
            grbEdycji.Enabled = False
            cmdDodajSchemat.Enabled = False
            cmdUsunSchemat.Enabled = False
        End If

    End Sub

    Private Sub Blokowanie()

        Dim lvarZapytanie As String
        Dim lvarPracownik As New clsPracownik
        Dim lvarSzukaniePracownika As New clsSzukanie

        mvarBlokowanie = New clsRecordLock(VAR_CONNECTION_PARAMETERS, mvarPozycjaZlecenia.Id, "tracking.pozycja_zlecenia", VAR_ERROR_HANDLER, CInt(mvarUzytkownik.Id))
        If Not mvarBlokowanie.RecordLocked Or mvarUzytkownik.Nazwisko = "PRODUKCJA" Then
            mvarWyznTylkoDoOdczytu = True
            lvarZapytanie = "AND id = " & mvarBlokowanie.RecordLockOwner
            lvarSzukaniePracownika.SzukajPracownika(mvarDbHolder, lvarZapytanie)
            For Each lvarTmp As clsPracownik In lvarSzukaniePracownika.Pracownik
                lvarPracownik = lvarTmp
            Next
            MessageBox.Show("TYLKO DO ODCZYT." & vbNewLine & "Blokuje pracownik: " & lvarPracownik.Nazwisko, "WIREMET")
            grbTylkoDoOdczytu.Visible = True
            txtInfKlient.Size = New Size(416, 20)
            lblTerminRealizacji.Location = New Point(483, 20)
            txtInfTerminRealizacji.Location = New Point(563, 17)
            lblStatusZlecenia.Location = New Point(657, 20)
            txtInfStatusZlecenia.Location = New Point(692, 17)
            cmdUsunSchemat.Enabled = False
            cmdDodajSchemat.Enabled = False
            grbEdycji.Enabled = False
            grbPrzyciskiEdycji.Enabled = False
            grbPrzyciskiZapisu.Enabled = False
        End If
        If mvarSchematId <> 0 Then
            mvarWyznTylkoDoOdczytu = True
            cmdUsunSchemat.Enabled = False
            cmdDodajSchemat.Enabled = False
            grbPrzyciskiZapisu.Enabled = False
        End If

    End Sub


#Region "Pobierz"

    Private Sub PobierzWszystkieGrupyMaszyny()

        Dim lvarDataTable As New DataTable

        lvarDataTable = clsGrupaMaszyny.PobierzWszystkieOpcje(mvarDbHolder, VAR_ERROR_HANDLER)

        If Not lvarDataTable Is Nothing Then
            For Each lvarRow As DataRow In lvarDataTable.Rows
                cmbGrupaMaszyny.Items.Add(New clsGrupaMaszyny(CStr(lvarRow("id")), CStr(IIf(IsDBNull(lvarRow("nazwa")), -1, lvarRow("nazwa")))))
            Next
        End If

    End Sub

    Private Sub PobierzWszystkieMaszyny(Combox As ComboBox)

        Dim lvarDataTable As New DataTable

        lvarDataTable = clsMaszyna.PobierzWszystkieMaszyny(mvarDbHolder, VAR_ERROR_HANDLER)

        If Not lvarDataTable Is Nothing Then
            For Each lvarRow As DataRow In lvarDataTable.Rows
                Combox.Items.Add(New clsMaszyna(CInt(lvarRow("id")), CInt(IIf(IsDBNull(lvarRow("numer")), String.Empty, lvarRow("numer"))), CStr(IIf(IsDBNull(lvarRow("nazwa")), String.Empty, lvarRow("nazwa"))), CStr(IIf(IsDBNull(lvarRow("opis")), String.Empty, lvarRow("opis"))), CDbl(IIf(IsDBNull(lvarRow("wydluzenie_1")), -1, lvarRow("wydluzenie_2"))), CDbl(IIf(IsDBNull(lvarRow("wydluzenie_2")), -1, lvarRow("wydluzenie_2"))), CInt(IIf(IsDBNull(lvarRow("grupa_maszyny_id")), -1, lvarRow("grupa_maszyny_id"))), CInt(IIf(IsDBNull(lvarRow("ilosc_kamieni")), -1, lvarRow("ilosc_kamieni")))))
            Next
        End If

    End Sub

    Private Sub PobierzWszystkieMaszynyGrupy(Combox As ComboBox, ByVal Id As Integer)

        Dim lvarDataTable As New DataTable

        lvarDataTable = clsInhMaszyna.PobierzWszystkieMaszynyGrupy(mvarDbHolder, Id)

        If Not lvarDataTable Is Nothing Then
            For Each lvarRow As DataRow In lvarDataTable.Rows
                Combox.Items.Add(New clsMaszyna(CInt(lvarRow("id")), CInt(IIf(IsDBNull(lvarRow("numer")), String.Empty, lvarRow("numer"))), CStr(IIf(IsDBNull(lvarRow("nazwa")), String.Empty, lvarRow("nazwa"))), CStr(IIf(IsDBNull(lvarRow("opis")), String.Empty, lvarRow("opis"))), CDbl(IIf(IsDBNull(lvarRow("wydluzenie_1")), -1, lvarRow("wydluzenie_2"))), CDbl(IIf(IsDBNull(lvarRow("wydluzenie_2")), -1, lvarRow("wydluzenie_2"))), CInt(IIf(IsDBNull(lvarRow("grupa_maszyny_id")), -1, lvarRow("grupa_maszyny_id"))), CInt(IIf(IsDBNull(lvarRow("ilosc_kamieni")), -1, lvarRow("ilosc_kamieni")))))
            Next
        End If

    End Sub

    Private Sub PobierzWszystkichPracownikow()

        Dim lvarDataTable As New DataTable

        lvarDataTable = clsPracownik.PobierzWszystkichPracownikow(mvarDbHolder, VAR_ERROR_HANDLER)

        If Not lvarDataTable Is Nothing Then
            For Each lvarRow As DataRow In lvarDataTable.Rows
                If CBool(lvarRow("aktywny")) Then
                    cmbPracownik.Items.Add(New clsPracownik(CStr(lvarRow("id")), CStr(IIf(IsDBNull(lvarRow("numer")), String.Empty, lvarRow("numer"))), CStr(IIf(IsDBNull(lvarRow("imie")), String.Empty, lvarRow("imie"))), CStr(IIf(IsDBNull(lvarRow("nazwisko")), String.Empty, lvarRow("nazwisko"))), CStr(IIf(IsDBNull(lvarRow("login")), String.Empty, lvarRow("login"))), CStr(IIf(IsDBNull(lvarRow("haslo")), String.Empty, lvarRow("haslo"))), CBool(IIf(IsDBNull(lvarRow("aktywny")), String.Empty, lvarRow("aktywny")))))
                End If
            Next
        End If

    End Sub

    Private Sub PobierzWszystkieOpakowania()

        Dim lvarDataTable As New DataTable

        lvarDataTable = clsPakowanie.PobierzWszystkieOpcje(mvarDbHolder, VAR_ERROR_HANDLER)

        If Not lvarDataTable Is Nothing Then
            For Each lvarRow As DataRow In lvarDataTable.Rows
                cmbSzpula.Items.Add(New clsPakowanie(CStr(lvarRow("id")), CType(IIf(IsDBNull(lvarRow("nazwa")), String.Empty, lvarRow("nazwa")), String), CType(IIf(IsDBNull(lvarRow("cena")), 0, lvarRow("cena")), Double), CType(IIf(IsDBNull(lvarRow("waga")), 0, lvarRow("waga")), Double)))
            Next
        End If

    End Sub

#End Region

    Private Sub SprawdzLiczbe(ByVal Liczba1 As String, ByVal Liczba2 As String)

        If Liczba1 <> String.Empty And IsNumeric(Liczba1) And Liczba2 <> String.Empty And IsNumeric(Liczba2) Then
            If CDbl(Liczba1) > 0 And CDbl(Liczba2) > 0 Then
                mvarWyznSprawdzeniaLiczby = True
            Else
                mvarWyznSprawdzeniaLiczby = False
            End If
        Else
            mvarWyznSprawdzeniaLiczby = False
        End If

    End Sub

    Function SprawdzenieWartosci() As Boolean

        If dgvSchematInformacje.Rows.Count > 0 Then
            For Each lvarRow As DataGridViewRow In dgvSchematInformacje.Rows
                CType(lvarRow.Tag, clsInhTrSchemat).Uwagi = CStr(lvarRow.Cells("colSchematUwagi").Value)
                CType(lvarRow.Tag, clsInhTrSchemat).Ilosc = CStr(lvarRow.Cells("colSchematIlosc").Value)
            Next
        End If

        For Each lvarRow As DataGridViewRow In dgvSchematInformacje.Rows
            If CType(lvarRow.Tag, clsInhTrSchemat).Ilosc <> String.Empty And IsNumeric(CType(lvarRow.Tag, clsInhTrSchemat).Ilosc) Then
                If CDbl(CType(lvarRow.Tag, clsInhTrSchemat).Ilosc) > 0 Then
                    If Not SprawdzenieWymiaru(CType(lvarRow.Tag, clsInhTrSchemat).PozycjeSchematu) Then
                        mvarKomunikat = "Podaj wymiar wyjściowy dla schematu " & lvarRow.Cells("colSchematLp").Value.ToString()
                        dgvSchematInformacje.ClearSelection()
                        lvarRow.Selected = True
                        UzupelnieniePozycjiSchematow()
                        dgvInformacje.Rows(0).Selected = True
                        Return False
                        Exit For
                    End If
                Else
                    mvarKomunikat = "Podaj poprawnie ilość wydania materiału z magazynu dla schematu " & lvarRow.Cells("colSchematLp").Value.ToString()
                    dgvSchematInformacje.ClearSelection()
                    lvarRow.Selected = True
                    UzupelnieniePozycjiSchematow()
                    Return False
                    Exit For
                End If
            Else
                mvarKomunikat = "Podaj ilość wydania materiału z magazynu dla schematu " & lvarRow.Cells("colSchematLp").Value.ToString()
                dgvSchematInformacje.ClearSelection()
                lvarRow.Selected = True
                UzupelnieniePozycjiSchematow()
                Return False
                Exit For
            End If
        Next
        Return True

    End Function

    Function SprawdzenieWymiaru(PozycjeSchematu As Collection(Of clsInhTrPozycjeSchematu)) As Boolean

        For Each lvarRow As clsTrPozycjeSchematu In PozycjeSchematu
            If lvarRow.WymiarWejsciowy = String.Empty Then
                Return False
                Exit For
            End If
        Next
        Return True

    End Function

    'ile drutu wydano z magazynu
    Function ObliczeWageMagazyn(Id As Integer) As Double

        Dim lvarReturn As Double

        'obliczenie wagi wydanej z magazynu do danego schematu
        For Each lvarMaterialProdukcyjny As clsInhTrMaterialProdukcyjny In CType(dgvSchematInformacje.SelectedRows(0).Tag, clsInhTrSchemat).MaterialProdukcyjny
            lvarReturn = lvarReturn + CDbl(Replace(lvarMaterialProdukcyjny.Ilosc, ".", ","))
        Next

        Return CDbl(Format(lvarReturn, "###0.000"))

    End Function
    'ile drutu przerobiono na danej operacji
    Function ObliczWageDrutu(PozycjaSchematuId As Integer) As Double

        Dim lvarReturn2 As Double

        Dim lvarDrut As clsTrSzukanie
        lvarDrut = New clsTrSzukanie
        lvarDrut.SzukajDrutuRodzica2(mvarDbHolder, CStr(PozycjaSchematuId), True)

        'For Each lvarDrutPotomek As clsInhTrDrut In lvarDrut.Drut
        '    For Each lvarTmp As clsTrRodzic In lvarDrutPotomek.Rodzic
        '        lvarReturn2 = lvarReturn2 + lvarTmp.Waga
        '    Next
        'Next
        lvarReturn2 = lvarDrut.WagaDrutu
        Return CDbl(Format(lvarReturn2, "###0.000"))

    End Function


    Private Sub Wyczysc()

        cmbGrupaMaszyny.SelectedIndex = -1
        cmbMaszyna.SelectedIndex = -1
        txtWymiarWejsciowy.Text = String.Empty
        txtWymiarKoncowy.Text = String.Empty
        cmbSzpula.SelectedIndex = -1
        cmbPracownik.SelectedIndex = -1
        txtUwagi.Text = String.Empty

        If mvarComboList.Count > -1 Then
            UsuniecieWszystkichMaszyn()
        End If

        cmbGrupaMaszyny.Enabled = True
        cmbMaszyna.Enabled = True
        cmdMaszynaDodaj.Enabled = True
        cmdMaszynaUsun.Enabled = True
        txtWymiarKoncowy.Enabled = True
        txtWymiarWejsciowy.Enabled = True
        cmbSzpula.Enabled = True
        cmdDodaj.Enabled = True
        cmdUsun.Enabled = True



    End Sub

    Private Sub UzupelnijDane()

        txtInfStatusZlecenia.Text = mvarPozycjaZlecenia.Status.Nazwa
        txtInfMaterial.Text = mvarPozycjaZlecenia.GatunekMaterialu.NazwaAng
        txtInfWymiar.Text = mvarPozycjaZlecenia.Wymiar
        txtInfIlosc.Text = mvarPozycjaZlecenia.Ilosc & " " & mvarPozycjaZlecenia.Jednostka.Jednostka
        txtInfTolDolna.Text = mvarPozycjaZlecenia.TolDolna
        txtInfTolGorna.Text = mvarPozycjaZlecenia.TolGorna
        txtInfWytrzymaloscMin.Text = mvarPozycjaZlecenia.WytrzymaloscMin
        txtInfWytrzymaloscMax.Text = mvarPozycjaZlecenia.WytrzymaloscMax
        txtInfWydluzenie.Text = mvarPozycjaZlecenia.Wydluzenie
        txtInfSzpula.Text = mvarPozycjaZlecenia.Pakowanie.Nazwa
        If mvarPozycjaZlecenia.PowierzonyMaterial Then
            txtInfMagazyn.Size = New Size(170, 41)
            txtInfUwagi.Size = New Size(208, 45)
            lblInfUwagi.Location = New Point(688, 41)
            txtInfUwagi.Location = New Point(724, 41)
            txtInfMagazyn.Text = mvarPozycjaZlecenia.Magazyn.Nazwa
            txtInfMagazyn.Text = txtInfMagazyn.Text & "(MAT. POWIERZONY)"
        Else
            txtInfMagazyn.Text = mvarPozycjaZlecenia.Magazyn.Nazwa
        End If
        txtInfUwagi.Text = mvarPozycjaZlecenia.Uwagi
        For Each lvarSchemat As clsInhTrSchemat In mvarPozycjaZlecenia.SchematyProdukcji
            dgvSchematInformacje.Rows.Add(dgvSchematInformacje.Rows.Count + 1, lvarSchemat.Id, lvarSchemat.Pracownik.Nazwisko, lvarSchemat.DataUtworzenia.ToShortDateString, lvarSchemat.Ilosc, lvarSchemat.Uwagi)
            dgvSchematInformacje.Rows(dgvSchematInformacje.Rows.Count - 1).Tag = lvarSchemat
        Next
        '----------------------------------------------------------
        txtInfKlient.Text = mvarKlient
        txtInfTerminRealizacji.Text = mvarTermin

        If mvarPozycjaZlecenia.DataZmiany <> "null" Then
            grbAktualizacja.Visible = True
            lblAktualizacja.Text = "OSTATNIA AKTUALIZACJA ZLECENIA: " & mvarPozycjaZlecenia.DataZmiany.ToString
            Me.Height = 624
            grbSchematu.Location = New Point(6, 150)
            grbZlecenie.Location = New Point(6, 49)
            grbTylkoDoOdczytu.Location = New Point(755, 49)
        End If

    End Sub

    Private Sub WydrukSchematu()

        Try
            Dim lvarKlucz As String = clsTrWydrukSchematu.PobierzKlucz(mvarDbHolder, VAR_ERROR_HANDLER, CType(dgvSchematInformacje.Rows(dgvSchematInformacje.SelectedRows.Item(0).Index).Tag, clsInhTrSchemat).Id)

            Dim schematProdukcjiReport As New SchematProdukcjiReport()
            schematProdukcjiReport.SetParameterValue("p_klucz", lvarKlucz)
            Dim reportPreview As New frmPrintViewer(schematProdukcjiReport, False)
            reportPreview.ShowDialog()

            clsWydrukSchematu.UsunKlucz(mvarDbHolder, VAR_ERROR_HANDLER, lvarKlucz)

        Catch ex As Exception
            MsgBox(ex.Message)
        End Try

    End Sub

    Private Sub DodanieKolejnejMaszyny()

        Dim lvarMaszyna As New ComboBox()

        If cmbGrupaMaszyny.SelectedIndex > -1 Then
            lvarMaszyna.Size = New Size(108, 21)
            lvarMaszyna.Name = "test" & mvarLicznik
            lvarMaszyna.Location = New Point(120, cmdMaszynaDodaj.Location.Y)
            lvarMaszyna.DropDownStyle = ComboBoxStyle.DropDownList
            grbEdycji.Controls.Add(lvarMaszyna)
            cmdMaszynaDodaj.Location = New Point(120, cmdMaszynaDodaj.Location.Y + 22)
            cmdMaszynaUsun.Location = New Point(174, cmdMaszynaUsun.Location.Y + 22)

            PobierzWszystkieMaszynyGrupy(lvarMaszyna, CInt(CType(cmbGrupaMaszyny.SelectedItem, clsGrupaMaszyny).Id))

            grbEdycji.Height = CInt(grbEdycji.Height + 22)
            grbPrzyciskiEdycji.Location = New Point(grbPrzyciskiEdycji.Location.X, grbPrzyciskiEdycji.Location.Y + 22)

            grbOperacje.Height = CInt(grbOperacje.Height + 22)
            grbSchematu.Height = CInt(grbSchematu.Height + 22)
            grbPrzyciskiZapisu.Location = New Point(grbPrzyciskiZapisu.Location.X, grbPrzyciskiZapisu.Location.Y + 22)
            Me.Height = CInt(Me.Height + 22)
            mvarLicznik = mvarLicznik + 1

            mvarComboList.Add(lvarMaszyna)

        End If

    End Sub

    Private Sub UsuniecieMaszyny()

        If mvarComboList.Count > 0 Then

            cmdMaszynaDodaj.Location = New Point(120, cmdMaszynaDodaj.Location.Y - 22)
            cmdMaszynaUsun.Location = New Point(174, cmdMaszynaUsun.Location.Y - 22)

            grbEdycji.Height = CInt(grbEdycji.Height - 22)
            grbPrzyciskiEdycji.Location = New Point(grbPrzyciskiEdycji.Location.X, grbPrzyciskiEdycji.Location.Y - 22)
            grbOperacje.Height = CInt(grbOperacje.Height - 22)
            grbSchematu.Height = CInt(grbSchematu.Height - 22)
            grbPrzyciskiZapisu.Location = New Point(grbPrzyciskiZapisu.Location.X, grbPrzyciskiZapisu.Location.Y - 22)
            Me.Height = CInt(Me.Height - 22)
            grbEdycji.Controls.Remove(mvarComboList.Item(mvarComboList.Count - 1))
            mvarComboList.Remove(mvarComboList.Item(mvarComboList.Count - 1))

        End If

    End Sub

    Private Sub UsuniecieWszystkichMaszyn()

        For Each lvarCombo As ComboBox In mvarComboList
            grbEdycji.Controls.Remove(lvarCombo)
        Next
        mvarComboList.Clear()
        cmdMaszynaDodaj.Location = New Point(120, 53)
        cmdMaszynaUsun.Location = New Point(174, 53)
        grbEdycji.Height = 84
        grbPrzyciskiEdycji.Location = New Point(318, 227)
        grbOperacje.Height = 280
        grbSchematu.Height = 422
        grbPrzyciskiZapisu.Location = New Point(610, 227)
        If mvarPozycjaZlecenia.DataZmiany <> "null" Then
            Me.Height = 624
        Else
            Me.Height = 587
        End If


    End Sub

    Private Sub Zapisz()

        For Each lvarRow As DataGridViewRow In dgvSchematInformacje.Rows
            CType(lvarRow.Tag, clsInhTrSchemat).Uwagi = CStr(lvarRow.Cells("colSchematUwagi").Value)
            CType(lvarRow.Tag, clsInhTrSchemat).Ilosc = CStr(lvarRow.Cells("colSchematIlosc").Value)
        Next
        With mvarPozycjaZlecenia
            If mvarPozycjaZlecenia.DataZmiany <> "null" Then
                .DataZmiany = mvarPozycjaZlecenia.DataZmiany
            End If

            .SchematyProdukcji.Clear()
            For Each lvarRow As DataGridViewRow In dgvSchematInformacje.Rows
                If CType(lvarRow.Tag, clsInhTrSchemat).PozycjeSchematu.Count > 0 Then
                    .SchematyProdukcji.Add(CType(lvarRow.Tag, clsInhTrSchemat))
                End If
            Next
            For Each lvarSchemat As clsInhTrSchemat In mvarPozycjaZlecenia.SchematyProdukcji
                For Each lvarPozycja As clsInhTrPozycjeSchematu In CType(dgvSchematInformacje.SelectedRows(0).Tag, clsInhTrSchemat).PozycjeSchematu
                    If lvarPozycja.OpcjaPozycjiSchematuId = 2 Then
                        Select Case lvarPozycja.StatusId
                            Case 6
                                mvarPozycjaZlecenia.StatusId = 5
                                VAR_ZAKONCZONA = True
                            Case 7
                                mvarPozycjaZlecenia.StatusId = 7
                                VAR_ZAKONCZONA = True
                            Case Else
                                mvarPozycjaZlecenia.StatusId = 4
                                VAR_ZAKONCZONA = False
                                Exit For
                        End Select
                    End If
                Next
            Next
            mvarDbHolder.BeginTrans()
            .Save(mvarDbHolder)
            mvarDbHolder.CommitTrans()
        End With


        MessageBox.Show("Zapisano do bazy.", "WIREMET")
        If dgvSchematInformacje.SelectedRows.Count > 0 Then
            mvarSchematIndex = dgvSchematInformacje.SelectedRows(0).Index
        End If

        mvarChanged = False
        Wyczysc()
        dgvSchematInformacje.Rows.Clear()
        dgvInformacje.Rows.Clear()

        UzupelnijDane()
        If dgvSchematInformacje.SelectedRows.Count > 0 Then
            dgvSchematInformacje.ClearSelection()
            dgvSchematInformacje.Rows.Item(mvarSchematIndex).Selected = True
            UzupelnieniePozycjiSchematow()
        End If

    End Sub


    Private Sub UzupelnieniePozycjiSchematow()

        Dim lvarI As Integer
        Dim lvarMaszyna As String
        Dim lvarSzereg As String

        lvarI = 0
        dgvInformacje.Rows.Clear()
        If dgvSchematInformacje.SelectedRows.Count > 0 Then

            For Each lvarPozycja As clsInhTrPozycjeSchematu In CType(dgvSchematInformacje.SelectedRows(0).Tag, clsInhTrSchemat).PozycjeSchematu
                lvarI += 1
                For Each lvarTmp As clsInhTrMaszynaPozycjiSchematu In lvarPozycja.Maszyny
                    If lvarMaszyna <> String.Empty Then
                        lvarMaszyna = lvarMaszyna & ", "
                    End If
                    lvarMaszyna = lvarMaszyna & lvarTmp.Maszyna.Nazwa
                    If lvarTmp.Szereg Then
                        lvarSzereg = lvarSzereg & lvarTmp.Maszyna.Nazwa
                    End If
                Next
                If lvarPozycja.OpcjaPozycjiSchematuId = 1 Then

                    dgvInformacje.Rows.Add(dgvInformacje.Rows.Count + 1, ObliczeWageMagazyn(lvarPozycja.Id), ObliczeWageMagazyn(lvarPozycja.Id), lvarPozycja.Id, "#", "#", Replace(lvarPozycja.WymiarWejsciowy, ".", ","), "#", "#", lvarPozycja.Pracownik.Nazwisko, lvarPozycja.Uwagi, String.Empty)
                    dgvInformacje.Rows(dgvInformacje.Rows.Count - 1).Tag = lvarPozycja

                     Select lvarPozycja.StatusId
                        Case 1 ' oczekuje
                            dgvInformacje.Rows.Item(lvarI - 1).DefaultCellStyle.BackColor = Color.FromArgb(219, 229, 241)
                        Case 4 'w produkcji
                            dgvInformacje.Rows.Item(lvarI - 1).DefaultCellStyle.BackColor = Color.FromArgb(149, 179, 215)
                            cmdUsunSchemat.Enabled = False
                    End Select

                ElseIf lvarPozycja.OpcjaPozycjiSchematuId = 2 Then
                    dgvInformacje.Rows.Add(lvarI, ObliczWageDrutu(lvarPozycja.Id), ObliczWageDrutu(lvarPozycja.Id), lvarPozycja.Id, lvarPozycja.GrupaMaszyny.Nazwa, lvarMaszyna, Replace(lvarPozycja.WymiarWejsciowy, ".", ","), Replace(lvarPozycja.WymiarKoncowy, ".", ","), lvarPozycja.Pakowanie.Nazwa, lvarPozycja.Pracownik.Nazwisko, lvarPozycja.Uwagi, lvarSzereg)
                    dgvInformacje.Rows(lvarI - 1).Tag = lvarPozycja
                    If lvarPozycja.Id <> -1 Then
                        Select Case lvarPozycja.StatusId
                            Case 1 'oczekuje
                                dgvInformacje.Rows.Item(lvarI - 1).DefaultCellStyle.BackColor = Color.FromArgb(219, 229, 241)
                            Case 4 'w produkcji
                                dgvInformacje.Rows.Item(lvarI - 1).DefaultCellStyle.BackColor = Color.FromArgb(149, 179, 215)
                            Case 6 'zakonczone
                                dgvInformacje.Rows.Item(lvarI - 1).DefaultCellStyle.BackColor = Color.FromArgb(55, 96, 145)
                        End Select
                    End If
                ElseIf lvarPozycja.OpcjaPozycjiSchematuId = 3 Then
                    dgvInformacje.Rows.Add(dgvInformacje.Rows.Count + 1, String.Empty, String.Empty, lvarPozycja.Id, "#", "#", "#", "#", "#", "#", "POPRAWA")
                    dgvInformacje.Rows(dgvInformacje.Rows.Count - 1).Tag = lvarPozycja
                    dgvInformacje.Rows.Item(lvarI - 1).DefaultCellStyle.BackColor = Color.Orange
                End If
                lvarSzereg = String.Empty
                lvarMaszyna = String.Empty
            Next

            'szereg
            If dgvInformacje.Rows.Count > 0 Then
                dgvInformacje.ClearSelection()
                If mvarPozycjaSchematuId <> 0 Then
                    For Each lvarPozycja As DataGridViewRow In dgvInformacje.Rows
                        If CInt(lvarPozycja.Cells("colNumer").Value) = mvarPozycjaSchematuId Then
                            lvarPozycja.Selected = True
                        End If
                    Next
                End If
            End If

            Dim lvar As Double

            'Obliczenie Aktualnej wagi na poszczególnych pozycjach - czyli ile znajduje się drutu na poszczególnych operacjach
            For Each lvarRow As DataGridViewRow In dgvInformacje.Rows
                lvarI += 1
                If CType(lvarRow.Tag, clsTrPozycjeSchematu).OpcjaPozycjiSchematuId = 2 Then
                    lvar = CDbl(dgvInformacje.Rows(lvarRow.Index - 1).Cells("colWaga").Value) - CDbl(lvarRow.Cells("colWaga").Value)
                    lvarRow.Cells("colAktualnaWaga").Value = Format(lvar, "###0.000")
                End If
            Next
            If Not mvarWyznTylkoDoOdczytu Then
                grbPrzyciskiEdycji.Enabled = True
                grbEdycji.Enabled = True
                grbPrzyciskiZapisu.Enabled = True
            Else
                grbPrzyciskiZapisu.Visible = False
                grbPrzyciskiEdycji.Visible = False
                grbEdycji.Enabled = False
            End If
        End If

        dgvInformacje.Sort(dgvInformacje.Columns("colLp"), System.ComponentModel.ListSortDirection.Ascending)

    End Sub

    Private Sub UzupelnienieEdycji()

        Dim lvarIndex As Integer
        Dim lvarLicznik As Integer = 1
        Wyczysc()
        If dgvInformacje.SelectedRows.Count > 0 Then
            If dgvInformacje.SelectedRows.Item(0).Index = 0 Then
                If dgvInformacje.SelectedRows.Item(0).Cells("colPracownik").Value.ToString() <> String.Empty Then
                    lvarIndex = cmbPracownik.FindString(CStr(dgvInformacje.SelectedRows.Item(0).Cells("colPracownik").Value))
                    cmbPracownik.SelectedIndex = lvarIndex
                End If
                txtUwagi.Text = CStr(dgvInformacje.SelectedRows.Item(0).Cells("colUwagi").Value)
                txtWymiarWejsciowy.Text = CStr(dgvInformacje.SelectedRows.Item(0).Cells("colWymiarWejsciowy").Value)

                grbPrzyciskiEdycji.Enabled = True
                grbEdycji.Enabled = True
                cmbGrupaMaszyny.Enabled = False
                cmbMaszyna.Enabled = False
                cmdMaszynaDodaj.Enabled = False
                cmdMaszynaUsun.Enabled = False
                txtWymiarKoncowy.Enabled = False
                cmbSzpula.Enabled = False
                cmdDodaj.Enabled = False
                cmdUsun.Enabled = False

            Else
                lvarIndex = cmbGrupaMaszyny.FindString(CStr(dgvInformacje.SelectedRows.Item(0).Cells("colGrupaMaszyny").Value))
                cmbGrupaMaszyny.SelectedIndex = lvarIndex
                txtWymiarWejsciowy.Text = CStr(dgvInformacje.SelectedRows.Item(0).Cells("colWymiarWejsciowy").Value)
                txtWymiarKoncowy.Text = CStr(dgvInformacje.SelectedRows.Item(0).Cells("colWymiarKoncowy").Value)
                lvarIndex = cmbSzpula.FindString(CStr(dgvInformacje.SelectedRows.Item(0).Cells("colSzpula").Value))
                cmbSzpula.SelectedIndex = lvarIndex
                lvarIndex = cmbPracownik.FindString(CStr(dgvInformacje.SelectedRows.Item(0).Cells("colPracownik").Value))
                cmbPracownik.SelectedIndex = lvarIndex
                txtUwagi.Text = CStr(dgvInformacje.SelectedRows.Item(0).Cells("colUwagi").Value)

                For Each lvar As clsInhTrMaszynaPozycjiSchematu In CType(dgvInformacje.SelectedRows(0).Tag, clsInhTrPozycjeSchematu).Maszyny

                    If CType(dgvInformacje.SelectedRows(0).Tag, clsInhTrPozycjeSchematu).Maszyny.Count >= lvarLicznik And lvarLicznik > 1 Then
                        Dim lvarMaszyna As New ComboBox()
                        lvarMaszyna.Size = New Size(108, 21)
                        lvarMaszyna.Name = "cmbMaszyna" & lvarLicznik
                        lvarMaszyna.Location = New Point(120, cmdMaszynaDodaj.Location.Y)
                        lvarMaszyna.DropDownStyle = ComboBoxStyle.DropDownList
                        grbEdycji.Controls.Add(lvarMaszyna)
                        cmdMaszynaDodaj.Location = New Point(120, cmdMaszynaDodaj.Location.Y + 22)
                        cmdMaszynaUsun.Location = New Point(174, cmdMaszynaUsun.Location.Y + 22)

                        PobierzWszystkieMaszynyGrupy(lvarMaszyna, CInt(CType(cmbGrupaMaszyny.SelectedItem, clsGrupaMaszyny).Id))

                        grbEdycji.Height = CInt(grbEdycji.Height + 22)
                        grbPrzyciskiEdycji.Location = New Point(grbPrzyciskiEdycji.Location.X, grbPrzyciskiEdycji.Location.Y + 22)
                        grbOperacje.Height = CInt(grbOperacje.Height + 22)
                        grbSchematu.Height = CInt(grbSchematu.Height + 22)
                        grbPrzyciskiZapisu.Location = New Point(grbPrzyciskiZapisu.Location.X, grbPrzyciskiZapisu.Location.Y + 22)
                        Me.Height = CInt(Me.Height + 22)
                        lvarLicznik = lvarLicznik + 1
                        mvarComboList.Add(lvarMaszyna)

                        lvarIndex = lvarMaszyna.FindString(lvar.Maszyna.Nazwa)
                        lvarMaszyna.SelectedIndex = lvarIndex

                    ElseIf lvarLicznik = 1 Then
                        lvarIndex = cmbMaszyna.FindString(lvar.Maszyna.Nazwa)
                        cmbMaszyna.SelectedIndex = lvarIndex
                        lvarLicznik = lvarLicznik + 1
                    End If
                Next

                grbPrzyciskiEdycji.Enabled = True
                grbEdycji.Enabled = True
                mvarLicznik = lvarLicznik
            End If
            If mvarWyznTylkoDoOdczytu Then
                grbEdycji.Enabled = False
                grbPrzyciskiEdycji.Enabled = False
            End If
        End If

    End Sub


    Private Sub dgvSchematInformacje_CellMouseClick(sender As Object, e As DataGridViewCellMouseEventArgs) Handles dgvSchematInformacje.CellMouseClick
        UzupelnieniePozycjiSchematow()
    End Sub

    Private Sub cmdDodajSchemat_Click(sender As Object, e As EventArgs) Handles cmdDodajSchemat.Click

        'If SprawdzenieWymiaru() Then
        Wyczysc()
        Dim lvarNowySchemat As New clsInhTrSchemat()
        With lvarNowySchemat
            .Id = -1
            .PracownikId = mvarUzytkownik.Id
            .Pracownik.Nazwisko = mvarUzytkownik.Nazwisko
            .DataUtworzenia = CDate(Now.Date.ToShortDateString)
            .PracownikZmianyId = mvarUzytkownik.Id
            .DataZmiany = Now.Date.ToShortDateString()
        End With
        dgvSchematInformacje.ClearSelection()
        dgvSchematInformacje.Rows.Add(dgvSchematInformacje.Rows.Count + 1, "nowy", mvarUzytkownik.Nazwisko, Now.Date.ToShortDateString)
        dgvSchematInformacje.Rows(dgvSchematInformacje.Rows.Count - 1).Tag = lvarNowySchemat
        dgvSchematInformacje.Rows.Item(dgvSchematInformacje.Rows.Count - 1).Selected = True
        If dgvSchematInformacje.Rows.Count - 1 > 4 Then
            dgvSchematInformacje.FirstDisplayedScrollingRowIndex = dgvSchematInformacje.Rows.Count - 1 - 1
        Else
            dgvSchematInformacje.FirstDisplayedScrollingRowIndex = dgvSchematInformacje.Rows.Count - 1
        End If
        dgvInformacje.Rows.Clear()

        Dim lvarNowaPozycja As New clsInhTrPozycjeSchematu()
        With lvarNowaPozycja
            .OpcjaPozycjiSchematuId = 1 'pobranie z magazynu
            .WymiarWejsciowy = String.Empty
            .StatusId = 1
        End With

        dgvInformacje.Rows.Add(dgvInformacje.Rows.Count + 1, String.Empty, String.Empty, String.Empty, "#", "#", String.Empty, "#", "#", String.Empty, String.Empty, String.Empty)
        dgvInformacje.Rows(dgvInformacje.Rows.Count - 1).Tag = lvarNowaPozycja
        dgvInformacje.Rows.Item(0).DefaultCellStyle.BackColor = Color.Lavender

        'DODANIE POZYCJI DO SCHEMATU
        CType(dgvSchematInformacje.Rows(dgvSchematInformacje.SelectedRows.Item(0).Index).Tag, clsInhTrSchemat).PracownikZmianyId = mvarUzytkownik.Id
        CType(dgvSchematInformacje.Rows(dgvSchematInformacje.SelectedRows.Item(0).Index).Tag, clsInhTrSchemat).DataZmiany = Now.Date.ToShortDateString()
        CType(dgvSchematInformacje.SelectedRows(0).Tag, clsInhTrSchemat).PozycjeSchematu.Add(CType(dgvInformacje.Rows(dgvInformacje.Rows.Count - 1).Tag, clsInhTrPozycjeSchematu))

        mvarChanged = True
        dgvInformacje.ClearSelection()

        dgvSchematInformacje.Focus()
        grbPrzyciskiEdycji.Enabled = True
        grbEdycji.Enabled = True
        dgvInformacje_CellMouseClick()

    End Sub

    Private Sub cmdUsunSchemat_Click(sender As Object, e As EventArgs) Handles cmdUsunSchemat.Click

        If dgvSchematInformacje.SelectedRows.Count > 0 Then
            Dim lvarIndexPoczatkowy As Integer
            lvarIndexPoczatkowy = dgvSchematInformacje.SelectedRows(0).Index
            mvarPozycjaZlecenia.SchematyProdukcjiDel.Add(CType(dgvSchematInformacje.SelectedRows(0).Tag, clsInhTrSchemat))
            mvarChanged = True
            dgvSchematInformacje.Rows.Remove(dgvSchematInformacje.CurrentRow)
            If dgvSchematInformacje.RowCount > 0 Then
                For lvarI As Integer = lvarIndexPoczatkowy To dgvSchematInformacje.Rows.Count - 1
                    dgvSchematInformacje.Rows.Item(lvarI).Cells("colSchematLp").Value = CInt(dgvSchematInformacje.Rows.Item(lvarI).Cells("colSchematLp").Value) - 1
                Next
            End If
            dgvSchematInformacje.ClearSelection()
            dgvInformacje.Rows.Clear()
            Wyczysc()
        Else
            MessageBox.Show("Wybierz schemat do usunięcia.", "WIREMET")
        End If
        If dgvInformacje.Rows.Count = 0 Then
            grbPrzyciskiEdycji.Enabled = False
            grbEdycji.Enabled = False
        End If

    End Sub


    Private Sub cmdMaszynaDodaj_Click(sender As Object, e As EventArgs) Handles cmdMaszynaDodaj.Click

        If cmbGrupaMaszyny.SelectedIndex > -1 Then
            DodanieKolejnejMaszyny()
        Else
            MessageBox.Show("Wybierz grupę maszyny.", "WIREMET")
        End If
    End Sub

    Private Sub cmdMaszynaUsun_Click(sender As Object, e As EventArgs) Handles cmdMaszynaUsun.Click
        If cmbGrupaMaszyny.SelectedIndex > -1 Then
            UsuniecieMaszyny()
        Else
            MessageBox.Show("Wybierz grupę maszyny.", "WIREMET")
        End If
    End Sub


    Private Sub cmdDodaj_Click(sender As Object, e As EventArgs) Handles cmdDodaj.Click
        Dim lvarTmp As String
        Dim lvarPracownik As String

        SprawdzLiczbe(txtWymiarWejsciowy.Text, txtWymiarKoncowy.Text)

        If Not mvarWyznSprawdzeniaLiczby Or cmbGrupaMaszyny.SelectedIndex = -1 Or cmbMaszyna.SelectedIndex = -1 Or cmbSzpula.SelectedIndex = -1 Then
            MessageBox.Show("Podaj wszystkie wartości poprawnie.", "WIREMET")
        Else

            Dim lvarNowaPozycja As New clsInhTrPozycjeSchematu()
            With lvarNowaPozycja
                .GrupaMaszynyId = CType(cmbGrupaMaszyny.SelectedItem, clsGrupaMaszyny).Id
                .GrupaMaszyny.Nazwa = CType(cmbGrupaMaszyny.SelectedItem, clsGrupaMaszyny).Nazwa
                .WymiarWejsciowy = txtWymiarWejsciowy.Text
                .WymiarKoncowy = Replace(txtWymiarKoncowy.Text, ",", ".")
                .PakowanieId = CType(cmbSzpula.SelectedItem, clsPakowanie).Id
                .Pakowanie.Nazwa = CType(cmbSzpula.SelectedItem, clsPakowanie).Nazwa
                If cmbPracownik.SelectedIndex <> -1 Then
                    .PracownikId = CType(cmbPracownik.SelectedItem, clsPracownik).Id
                    .Pracownik.Nazwisko = CType(cmbPracownik.SelectedItem, clsPracownik).Nazwisko
                    lvarPracownik = CType(cmbPracownik.SelectedItem, clsPracownik).Nazwisko
                End If

                .Uwagi = txtUwagi.Text
                .OpcjaPozycjiSchematuId = 2
                .StatusId = 1
            End With

            lvarTmp = CType(cmbMaszyna.SelectedItem, clsMaszyna).Nazwa
            Dim lvarNowaMaszyna As New clsInhTrMaszynaPozycjiSchematu()
            With lvarNowaMaszyna
                .Maszyna.Nazwa = CType(cmbMaszyna.SelectedItem, clsMaszyna).Nazwa
                .MaszynaId = CType(cmbMaszyna.SelectedItem, clsMaszyna).Id
                .PozycjeSchematuProdukcjiId = lvarNowaMaszyna.Id
            End With
            lvarNowaPozycja.Maszyny.Add(lvarNowaMaszyna)
            For Each lvarCombo As ComboBox In mvarComboList
                lvarTmp = lvarTmp & ", " & CType(lvarCombo.SelectedItem, clsMaszyna).Nazwa
                'DODANIE COMBO DO MASZYN SCHEMATU
                Dim lvarNowa As New clsInhTrMaszynaPozycjiSchematu()
                With lvarNowa
                    .Maszyna.Nazwa = CType(lvarCombo.SelectedItem, clsMaszyna).Nazwa
                    .MaszynaId = CType(lvarCombo.SelectedItem, clsMaszyna).Id
                    .PozycjeSchematuProdukcjiId = lvarNowa.Id
                End With
                lvarNowaPozycja.Maszyny.Add(lvarNowa)
            Next

            dgvInformacje.Rows.Add(dgvSchematInformacje.Rows.Count + 1, String.Empty, String.Empty, String.Empty, CType(cmbGrupaMaszyny.SelectedItem, clsGrupaMaszyny).Nazwa, lvarTmp, txtWymiarWejsciowy.Text, txtWymiarKoncowy.Text, CType(cmbSzpula.SelectedItem, clsPakowanie).Nazwa, lvarPracownik, txtUwagi.Text)
            dgvInformacje.Rows(dgvInformacje.Rows.Count - 1).Tag = lvarNowaPozycja

            'DODANIE POZYCJI DO SCHEMATU
            CType(dgvSchematInformacje.Rows(dgvSchematInformacje.SelectedRows.Item(0).Index).Tag, clsInhTrSchemat).PracownikZmianyId = mvarUzytkownik.Id
            CType(dgvSchematInformacje.Rows(dgvSchematInformacje.SelectedRows.Item(0).Index).Tag, clsInhTrSchemat).DataZmiany = Now.Date.ToShortDateString()
            CType(dgvSchematInformacje.SelectedRows(0).Tag, clsInhTrSchemat).PozycjeSchematu.Add(CType(dgvInformacje.Rows(dgvInformacje.Rows.Count - 1).Tag, clsInhTrPozycjeSchematu))

            mvarChanged = True
            Wyczysc()
        End If
    End Sub

    Private Sub cmdZmien_Click(sender As Object, e As EventArgs) Handles cmdZmien.Click

        Dim lvarTmp As String
        Dim lvarPracownik As String

        If dgvInformacje.SelectedRows.Count > 0 Then

            If dgvInformacje.SelectedRows.Item(0).Index = 0 Then
                SprawdzLiczbe(txtWymiarWejsciowy.Text, CStr(1))
                If Not mvarWyznSprawdzeniaLiczby Then
                    MessageBox.Show("Podaj wszystkie wartości poprawnie.", "WIREMET")
                Else
                    With CType(dgvInformacje.SelectedRows.Item(0).Tag, clsInhTrPozycjeSchematu)
                        If cmbPracownik.SelectedIndex <> -1 Then
                            .PracownikId = CType(cmbPracownik.SelectedItem, clsPracownik).Id
                            .Pracownik.Nazwisko = CType(cmbPracownik.SelectedItem, clsPracownik).Nazwisko
                            lvarPracownik = CType(cmbPracownik.SelectedItem, clsPracownik).Nazwisko
                        End If
                        .Uwagi = txtUwagi.Text
                        .WymiarWejsciowy = txtWymiarWejsciowy.Text
                    End With

                    With dgvInformacje.SelectedRows.Item(0)
                        .Cells("colWymiarWejsciowy").Value = txtWymiarWejsciowy.Text
                        .Cells("colPracownik").Value = lvarPracownik
                        .Cells("colUwagi").Value = txtUwagi.Text
                    End With
                    mvarChanged = True
                    dgvInformacje.ClearSelection()
                    Wyczysc()
                End If
            Else
                SprawdzLiczbe(txtWymiarWejsciowy.Text, txtWymiarKoncowy.Text)
                If Not mvarWyznSprawdzeniaLiczby Or cmbGrupaMaszyny.SelectedIndex = -1 Or cmbMaszyna.SelectedIndex = -1 Or cmbSzpula.SelectedIndex = -1 Then
                    MessageBox.Show("Podaj wszystkie wartości poprawnie.", "WIREMET")
                Else
                    'USUWANIE MASZYN
                    For Each lvarMaszyna As clsInhTrMaszynaPozycjiSchematu In CType(dgvInformacje.SelectedRows.Item(0).Tag, clsInhTrPozycjeSchematu).Maszyny
                        If lvarMaszyna.Id <> -1 Then
                            CType(dgvInformacje.SelectedRows.Item(0).Tag, clsInhTrPozycjeSchematu).MaszynyDel.Add(lvarMaszyna)
                        End If
                    Next

                    With CType(dgvInformacje.SelectedRows.Item(0).Tag, clsInhTrPozycjeSchematu)
                        .GrupaMaszynyId = CType(cmbGrupaMaszyny.SelectedItem, clsGrupaMaszyny).Id
                        .GrupaMaszyny.Nazwa = CType(cmbGrupaMaszyny.SelectedItem, clsGrupaMaszyny).Nazwa
                        .WymiarWejsciowy = txtWymiarWejsciowy.Text
                        .WymiarKoncowy = txtWymiarKoncowy.Text
                        .PakowanieId = CType(cmbSzpula.SelectedItem, clsPakowanie).Id
                        .Pakowanie.Nazwa = CType(cmbSzpula.SelectedItem, clsPakowanie).Nazwa
                        If cmbPracownik.SelectedIndex <> -1 Then
                            .PracownikId = CType(cmbPracownik.SelectedItem, clsPracownik).Id
                            .Pracownik.Nazwisko = CType(cmbPracownik.SelectedItem, clsPracownik).Nazwisko
                            lvarPracownik = CType(cmbPracownik.SelectedItem, clsPracownik).Nazwisko
                        End If
                        .Uwagi = txtUwagi.Text
                        .Maszyny.Clear()
                    End With

                    lvarTmp = CType(cmbMaszyna.SelectedItem, clsMaszyna).Nazwa
                    Dim lvarNowaMaszyna As New clsInhTrMaszynaPozycjiSchematu()
                    With lvarNowaMaszyna
                        .Maszyna.Nazwa = CType(cmbMaszyna.SelectedItem, clsMaszyna).Nazwa
                        .MaszynaId = CType(cmbMaszyna.SelectedItem, clsMaszyna).Id
                        .PozycjeSchematuProdukcjiId = CType(dgvInformacje.SelectedRows.Item(0).Tag, clsInhTrPozycjeSchematu).Id
                    End With
                    CType(dgvInformacje.SelectedRows.Item(0).Tag, clsInhTrPozycjeSchematu).Maszyny.Add(lvarNowaMaszyna)
                    For Each lvarCombo As ComboBox In mvarComboList
                        lvarTmp = lvarTmp & ", " & CType(lvarCombo.SelectedItem, clsMaszyna).Nazwa
                        'DODANIE COMBO DO MASZYN SCHEMATU
                        Dim lvarNowa As New clsInhTrMaszynaPozycjiSchematu()
                        With lvarNowa
                            .Maszyna.Nazwa = CType(lvarCombo.SelectedItem, clsMaszyna).Nazwa
                            .MaszynaId = CType(lvarCombo.SelectedItem, clsMaszyna).Id
                            .PozycjeSchematuProdukcjiId = lvarNowa.Id
                        End With
                        CType(dgvInformacje.SelectedRows.Item(0).Tag, clsInhTrPozycjeSchematu).Maszyny.Add(lvarNowa)
                    Next
                    With dgvInformacje.SelectedRows.Item(0)
                        .Cells("colGrupaMaszyny").Value = CType(cmbGrupaMaszyny.SelectedItem, clsGrupaMaszyny).Nazwa
                        .Cells("colMaszyna").Value = lvarTmp
                        .Cells("colWymiarWejsciowy").Value = txtWymiarWejsciowy.Text
                        .Cells("colWymiarKoncowy").Value = txtWymiarKoncowy.Text
                        .Cells("colSzpula").Value = CType(cmbSzpula.SelectedItem, clsPakowanie).Nazwa
                        .Cells("colPracownik").Value = lvarPracownik
                        .Cells("colUwagi").Value = txtUwagi.Text
                    End With


                    mvarChanged = True
                    dgvInformacje.ClearSelection()
                    Wyczysc()
                End If
            End If

            'DODANIE POZYCJI DO SCHEMATU
            CType(dgvSchematInformacje.Rows(dgvSchematInformacje.SelectedRows.Item(0).Index).Tag, clsInhTrSchemat).PracownikZmianyId = mvarUzytkownik.Id
            CType(dgvSchematInformacje.Rows(dgvSchematInformacje.SelectedRows.Item(0).Index).Tag, clsInhTrSchemat).DataZmiany = Now.Date.ToShortDateString()
        Else
            MessageBox.Show("Wybierz operację do zmiany.", "WIREMET")
        End If
    End Sub

    Private Sub cmdUsun_Click(sender As Object, e As EventArgs) Handles cmdUsun.Click

        Dim lvarIndexPoczatkowy As Integer

        If dgvInformacje.SelectedRows.Count > 0 Then

            CType(dgvSchematInformacje.Rows(dgvSchematInformacje.SelectedRows.Item(0).Index).Tag, clsInhTrSchemat).PracownikZmianyId = mvarUzytkownik.Id
            CType(dgvSchematInformacje.Rows(dgvSchematInformacje.SelectedRows.Item(0).Index).Tag, clsInhTrSchemat).DataZmiany = Now.Date.ToShortDateString()
            CType(dgvSchematInformacje.SelectedRows(0).Tag, clsInhTrSchemat).PozycjeSchematuDel.Add(CType(dgvInformacje.SelectedRows(0).Tag, clsInhTrPozycjeSchematu))
            CType(dgvSchematInformacje.SelectedRows(0).Tag, clsInhTrSchemat).PozycjeSchematu.Remove(CType(dgvInformacje.SelectedRows(0).Tag, clsInhTrPozycjeSchematu))

            lvarIndexPoczatkowy = dgvInformacje.CurrentRow.Index
            dgvInformacje.Rows.Remove(dgvInformacje.CurrentRow)
            For lvarI As Integer = lvarIndexPoczatkowy To dgvSchematInformacje.Rows.Count - 1
                dgvInformacje.Rows.Item(lvarI).Cells("colLp").Value = CInt(dgvInformacje.Rows.Item(lvarI).Cells("colLp").Value) - 1
            Next
            dgvInformacje.ClearSelection()
            cmbMaszyna.Focus()
            Wyczysc()
            mvarChanged = True
        Else
            MessageBox.Show("Wybierz operację do usunięcia.", "WIREMET")
        End If

    End Sub


    Private Sub cmdZapisz_Click(sender As Object, e As EventArgs) Handles cmdZapisz.Click
        If mvarChanged Then
            If SprawdzenieWartosci() Then
                Zapisz()
            Else
                MessageBox.Show(mvarKomunikat & ".", "WIREMET")
                mvarKomunikat = String.Empty
            End If
        Else
            MessageBox.Show("Nie wprowadzono żadnych zmian.", "WIREMET")
        End If
    End Sub

    Private Sub cmdDrukuj_Click(sender As Object, e As EventArgs) Handles cmdDrukuj.Click

        If dgvSchematInformacje.SelectedRows.Count > 0 Then
            If Not mvarChanged Then
                WydrukSchematu()
            Else
                If mvarPozycjaZlecenia.Id > -1 Then
                    Select Case MsgBox("Czy zapisać zmiany do bazy danych?", MsgBoxStyle.YesNo, "WIREMET")
                        Case MsgBoxResult.No
                            If CType(dgvSchematInformacje.SelectedRows.Item(0).Tag, clsInhTrSchemat).Id <> -1 Then
                                WydrukSchematu()
                            Else
                                MessageBox.Show("Schemat nie jest zapisany w bazie danych.", "WIREMET")
                            End If
                        Case MsgBoxResult.Yes
                            Zapisz()
                            MessageBox.Show("Zapisano do bazy.", "WIREMET")
                            WydrukSchematu()
                    End Select
                Else
                    MessageBox.Show("Pozycja zlecenia nie jest zapisana w bazie danych.", "WIREMET")
                End If
            End If
        Else
            MessageBox.Show("Wybierz schemat do wydruku.", "WIREMET")
        End If
    End Sub


    Private Sub dgvInformacje_CellMouseClick(sender As Object, e As DataGridViewCellMouseEventArgs) Handles dgvInformacje.CellMouseClick

        Dim lvarXY As Integer = 0

        If mvarSchematId = 0 Then
            If dgvInformacje.SelectedRows.Count > 0 Then
                If CType(dgvInformacje.SelectedRows(0).Tag, clsInhTrPozycjeSchematu).StatusId = 4 Or CType(dgvInformacje.SelectedRows(0).Tag, clsInhTrPozycjeSchematu).StatusId = 6 Then
                    ''     MessageBox.Show("Nie można już edytować danej pozycji schematu.", "WIREMET")
                    grbEdycji.Enabled = False
                    grbPrzyciskiEdycji.Enabled = False
                    grbPrzyciskiZapisu.Enabled = False
                    dgvInformacje_CellMouseDoubleClick(sender, e)
                ElseIf CType(dgvInformacje.SelectedRows(0).Tag, clsInhTrPozycjeSchematu).OpcjaPozycjiSchematuId <> 3 Then
                    UzupelnienieEdycji()
                End If
            End If
        ElseIf mvarWyznTylkoDoOdczytu Then
            For Each lvarMaszyna As clsInhTrMaszynaPozycjiSchematu In CType(dgvInformacje.SelectedRows(0).Tag, clsInhTrPozycjeSchematu).Maszyny
                If CDbl(lvarMaszyna.Maszyna.Wydluzenie_1) <> 0 And CDbl(lvarMaszyna.Maszyna.Wydluzenie_2) <> 0 Then
                    Dim lvarFrm As New frmSzereg(CType(dgvInformacje.SelectedRows(0).Tag, clsInhTrPozycjeSchematu).Id, lvarMaszyna.Id, CDbl(CType(dgvInformacje.SelectedRows(0).Tag, clsInhTrPozycjeSchematu).WymiarWejsciowy), CDbl(CType(dgvInformacje.SelectedRows(0).Tag, clsInhTrPozycjeSchematu).WymiarKoncowy))
                    With lvarFrm
                        .Location = New Point(200 + lvarXY, 200 + lvarXY)
                        .Show()
                    End With
                    lvarXY = lvarXY + 20
                Else
                    MessageBox.Show("Do tej pozycji ciagadła są nie potrzebne.", "WIREMET")
                End If
            Next
        End If

    End Sub

    Private Sub dgvInformacje_CellMouseClick()

        Dim lvarIndex As Integer
        Dim lvarLicznik As Integer = 1
        Wyczysc()
        dgvInformacje.Rows.Item(0).Selected = True

        If dgvInformacje.SelectedRows.Item(0).Cells("colPracownik").Value.ToString() <> String.Empty Then
            lvarIndex = cmbPracownik.FindString(CStr(dgvInformacje.SelectedRows.Item(0).Cells("colPracownik").Value))
            cmbPracownik.SelectedIndex = lvarIndex
        End If
        txtUwagi.Text = CStr(dgvInformacje.SelectedRows.Item(0).Cells("colUwagi").Value)
        txtWymiarWejsciowy.Text = CStr(dgvInformacje.SelectedRows.Item(0).Cells("colWymiarWejsciowy").Value)
        grbPrzyciskiEdycji.Enabled = True
        grbEdycji.Enabled = True
        cmbGrupaMaszyny.Enabled = False
        cmbMaszyna.Enabled = False
        cmdMaszynaDodaj.Enabled = False
        cmdMaszynaUsun.Enabled = False
        txtWymiarKoncowy.Enabled = False
        cmbSzpula.Enabled = False
        cmdDodaj.Enabled = False
        cmdUsun.Enabled = False

    End Sub



    Private Sub cmbGrupaMaszyny_SelectedValueChanged(sender As Object, e As EventArgs) Handles cmbGrupaMaszyny.SelectedValueChanged
        cmbMaszyna.Items.Clear()
        If mvarComboList.Count > -1 Then
            UsuniecieWszystkichMaszyn()
        End If
        If cmbGrupaMaszyny.SelectedIndex <> -1 Then
            PobierzWszystkieMaszynyGrupy(cmbMaszyna, CInt(CType(cmbGrupaMaszyny.SelectedItem, clsGrupaMaszyny).Id))
        End If
    End Sub


    Private Sub frmTrPozycjaZlecenia_Load(sender As Object, e As EventArgs) Handles Me.Load

        If dgvSchematInformacje.Rows.Count > 0 Then
            If mvarSchematId <> 0 Then
                For Each lvarRow As DataGridViewRow In dgvSchematInformacje.Rows
                    If CInt(lvarRow.Cells("colId").Value) = mvarSchematId Then
                        dgvSchematInformacje.ClearSelection()
                        lvarRow.Selected = True
                        UzupelnieniePozycjiSchematow()
                        Exit For
                    End If
                Next
            Else
                UzupelnieniePozycjiSchematow()
            End If
        End If

    End Sub

    Private Sub frmTrPozycjaZlecenia_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing

        If mvarChanged Then
            Select Case MsgBox("Czy zapisać zmiany do bazy danych?", MsgBoxStyle.YesNo, "WIREMET")
                Case MsgBoxResult.No
                Case MsgBoxResult.Yes
                    If SprawdzenieWartosci() Then
                        Zapisz()
                    Else
                        MessageBox.Show(mvarKomunikat & ".", "WIREMET")
                        mvarKomunikat = String.Empty
                        e.Cancel = True
                    End If
            End Select
        End If

    End Sub

    Private Sub frmTrPozycjaZlecenia_FormClosed(sender As Object, e As FormClosedEventArgs) Handles Me.FormClosed
        If Not mvarWyznTylkoDoOdczytu Then
            mvarBlokowanie.Unlock()
        End If
        mvarDbHolder.Close()
    End Sub


    Private Sub dgvInformacje_CellMouseDoubleClick(sender As Object, e As DataGridViewCellMouseEventArgs) Handles dgvInformacje.CellMouseDoubleClick

        If Not mvarWyznKontrola Then
            If dgvInformacje.SelectedRows.Count <> 0 Then
                If mvarSchematId = 0 And mvarUzytkownik.Numer <> 2223 Then
                    Dim lvarFrm As New frmNumerOperacji()
                    lvarFrm.txtNumerPozycjiSchematu.Text = CStr(CType(dgvInformacje.SelectedRows(0).Tag, clsInhTrPozycjeSchematu).Id)
                    lvarFrm.ShowDialog()
                End If
            End If
        End If

    End Sub

    Private Sub cmdPowiazanieMaterialu_Click(sender As Object, e As EventArgs) Handles cmdPowiazanieMaterialu.Click
        Dim lvarFrm As New frmPowiazanieMaterialu()
        With lvarFrm
            .txtNumerSchematu.Text = CStr(CType(dgvSchematInformacje.SelectedRows(0).Tag, clsInhTrSchemat).Id)
            .SzukajDanych()
            .ShowDialog()
        End With

    End Sub

    Private Sub cmdAnuluj_Click(sender As Object, e As EventArgs) Handles cmdAnuluj.Click

        Select Case MsgBox("Czy na pewno chcesz anulować dane zlecenie?", MsgBoxStyle.YesNo, "WIREMET")
            Case MsgBoxResult.No
            Case MsgBoxResult.Yes
                Anuluj()
        End Select

    End Sub

    Private Sub cmdZakoncz_Click(sender As Object, e As EventArgs) Handles cmdZakoncz.Click
        Select Case MsgBox("Czy na pewno chcesz zakonczyc dane zlecenie?", MsgBoxStyle.YesNo, "WIREMET")
            Case MsgBoxResult.No
            Case MsgBoxResult.Yes
                Zakoncz()
        End Select
    End Sub


    Private Sub Anuluj()
        mvarPozycjaZlecenia.StatusId = 7
        mvarDbHolder.BeginTrans()
        mvarPozycjaZlecenia.Save(mvarDbHolder)
        mvarDbHolder.CommitTrans()
    End Sub

    Private Sub Zakoncz()

        Dim lvarZlecenie As clsInhTrZlecenie
        Dim lvarTmpStaus As Integer
        Dim lvarWyzn As Boolean = False

        mvarPozycjaZlecenia.StatusId = 6
        mvarDbHolder.BeginTrans()
        mvarPozycjaZlecenia.Save(mvarDbHolder)
        mvarDbHolder.CommitTrans()

        lvarZlecenie = New clsInhTrZlecenie(mvarPozycjaZlecenia.ZlecenieId, mvarDbHolder, True)
        lvarTmpStaus = lvarZlecenie.StatusId

        dgvInformacje.Rows.Clear()

        For Each lvarPozycja As clsInhTrPozycjaZlecenia In lvarZlecenie.PozycjeZlecenia
            If lvarPozycja.StatusId < lvarTmpStaus Then
                lvarTmpStaus = lvarPozycja.StatusId
            End If
        Next
        If lvarTmpStaus < 4 Then
            lvarTmpStaus = 4
        End If
        mvarDbHolder.BeginTrans()
        lvarZlecenie.StatusId = lvarTmpStaus
        lvarZlecenie.Save(mvarDbHolder)
        mvarDbHolder.CommitTrans()
    End Sub



    Private Sub cmdOdswiez_Click(sender As Object, e As EventArgs) Handles cmdOdswiez.Click

        dgvSchematInformacje.Rows.Clear()
        dgvInformacje.Rows.Clear()
        Wyczysc()
        mvarPozycjaZlecenia = New clsInhTrPozycjaZlecenia(mvarPozycjaZlecenia.Id, mvarDbHolder, True)
        UzupelnijDane()

        Dim lvarWyznZakonczenia As Boolean

        For lvarI As Integer = 0 To dgvSchematInformacje.Rows.Count - 1
            If CType(dgvSchematInformacje.Rows(lvarI).Tag, clsInhTrSchemat).PozycjeSchematu(CType(dgvSchematInformacje.Rows(lvarI).Tag, clsInhTrSchemat).PozycjeSchematu.Count - 1).StatusId = 6 Then
                lvarWyznZakonczenia = True
            Else
                lvarWyznZakonczenia = False
                Exit For
            End If
        Next

        If lvarWyznZakonczenia Then
            mvarDbHolder.BeginTrans()
            mvarPozycjaZlecenia.StatusId = 5
            mvarPozycjaZlecenia.Save(mvarDbHolder)
            mvarDbHolder.CommitTrans()
        End If
        mvarPozycjaZlecenia = New clsInhTrPozycjaZlecenia(mvarPozycjaZlecenia.Id, mvarDbHolder, True)
        dgvSchematInformacje.Rows.Clear()
        UzupelnijDane()

    End Sub

    Private Sub btn_PowiazanieMaterialu_Click(sender As System.Object, e As System.EventArgs) Handles btn_PowiazanieMaterialu.Click
        ShowPowiazanieMaterialuForm()
    End Sub

    Private Sub ShowPowiazanieMaterialuForm()
        If Not dgvSchematInformacje.SelectedRows.Count = 0 Then
            Dim schematId As Integer = CInt(dgvSchematInformacje.SelectedRows(0).Cells("colId").Value)
            Dim powiazanieMaterialuForm As New frmPowiazanieMaterialu(schematId)
            powiazanieMaterialuForm.Show()
        End If
    End Sub

End Class